﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Gruppe1OOPEksamen {

    class Emhætte : Vare, ISmileyKontrol {
        // Intans Variabler
        private int _støjniveau;
        private int _sugekapacitet;
        private string _type;
        private bool _filter;

        // Properties
        public int Køkkenstørelse { get; private set; }
        public bool Filter {
            get { 
                return _filter; 
            }
            set {
                _filter = value;
                SmileyKontrol(); // Der checkes om emhætten har filter hvorefter der returneres den korresponderende smiley
            }
        }
        public string Smiley { get; set; }
        public int Støjniveau {
            get {
                return _støjniveau;
            }
            set {
                if (value < 0 || value > 140) ; // Hvis værdien ligger under 0 eller over 140 bliver det ignoreret
                else _støjniveau = value;
            }
        }

        public int Sugekapacitet {
            get {
                return _sugekapacitet;
            }
            set {
                if (value > 0) {
                    _sugekapacitet = value;
                    sætKøkkenStørrelse(); // Køkkenstørelsen bliver beregnet
                }
            }
        }
        public string Type {
            get {
                return _type;
            }
            set {
                string temp = value.ToLower();
                if (temp.Equals("frihængt") || temp.Equals("væghængt") || temp.Equals("indbygget")) _type = temp; // Der checkes om inputet er et af de tre gyldige string værdier
                else throw new ArgumentException("Eneste gyldige typer er, frihængt, væghængt eller indbygget."); // Ellers bliver der kastet en argumentexception
            }
        }

        // Constructor
        #region constructors
        public Emhætte(string typeInd, int støjniveauInd, int sugekapacitetInd, bool filterInd, int prisInd, string navnInd)
                : base(navnInd, prisInd){
            Type = typeInd;
            Støjniveau = støjniveauInd;
            Sugekapacitet = sugekapacitetInd;
            Filter = filterInd;
        }
        #endregion

        // Instans metoder
        private void sætKøkkenStørrelse() { // Køkkenstørelsen bliver beregnet afhægig af sugekapaciteten
            if (Rækkevidde.MindreEnd<int>(Sugekapacitet, 375)) Køkkenstørelse = 10;
            else if (Rækkevidde.MindreEnd<int>(Sugekapacitet, 500)) Køkkenstørelse = 15;
            else if (Rækkevidde.MindreEnd<int>(Sugekapacitet, 625)) Køkkenstørelse = 20;
            else if (Rækkevidde.MindreEnd<int>(Sugekapacitet, 750)) Køkkenstørelse = 25;
            else if (Rækkevidde.MindreEnd<int>(Sugekapacitet, 875)) Køkkenstørelse = 30;
            else Køkkenstørelse = 35;
        }

        public void SmileyKontrol() {
            if (Filter) Smiley = "Ligeglad";
            else Smiley = "Sur";
        }

        public override string ToString() {
            string toReturn = "";

            toReturn += base.ToString();
            //tilføj Køkkenstørelse
            toReturn += "\nKøkkenstørrelse: " + Køkkenstørelse + " Kvadratmeter";
            //tilføj Filter
            toReturn += "\nFilter: " + (Filter == true ? "Ja" : "Nej");
            //tilføj Smiley
            toReturn += "\nSmiley: " + Smiley;
            //tilføj Støjniveau
            toReturn += "\nStøjniveau: " + Støjniveau + "dB.";
            //tilføj Sugekapacitet
            toReturn += "\nSugekapacitet: " + Sugekapacitet + " Kubikmeter pr. time";
            //tilføj Type
            toReturn += "\nType: " + Type;

            return toReturn;
        }
    }
}
